Repository navigation
Conversation
Adopt GitHub Actions' new step-level parallelism (parallel/background/wait) to overlap independent work within single jobs: - frontend-format: run the 6 independent linters concurrently - rust test / backend turbo-tests / nodejs tests + rust_ingestion_e2e: parallelize independent toolchain installs (rust, protoc, sccache, python, uv, pnpm, mmdb), keeping dependent steps (sqlx-cli, SAML, python deps) sequential after the group - rust linting: run cargo fmt and the cargo-binstall download in the background so they overlap with the heavy clippy/check compilation - backend repo-checks: run the read-only static checks concurrently - python code-quality: run the independent tool test suites concurrently - hog: run the HogVM Python and TypeScript suites concurrently The pinned actionlint predates this feature, so it would flag the new step keys; suppress only those messages until a supporting version is pinned. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016naK9Bwh7TtH5KcmKAYzzS
Apply GitHub Actions' parallel-steps to the remaining heavy setup blocks, overlapping independent installs within single jobs: - backend django (main test matrix): group the independent installs (uv, rust, hogql-parser diff, hostnames) after the token-gated Python setup - ci-ai eval, ci-dagster, ci-mcp build + integration-tests, ci-agents unit/e2e: parallelize independent toolchain/dep installs - ci-agents typecheck-lint: run typescript:check, lint and format:check concurrently Dependent steps (SAML apt, sqlx-cli, python deps, rust builds) stay sequential after each group, respecting data and apt-lock ordering. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016naK9Bwh7TtH5KcmKAYzzS
Contributor
|
Size Change: 0 B Total Size: 64.2 MB ℹ️ View Unchanged
|
Contributor
|
Reviews (1): Last reviewed commit: "chore(ci): extend step-level parallelism..." | Re-trigger Greptile |
The GitHub Actions parallel-steps feature (parallel/background/wait) crashes our runner: every converted job fails immediately with "Object reference not set to an instance of an object" (a NullReferenceException in runner 2.335.1 on Depot) while building the step execution plan. Jobs that weren't converted pass, confirming the runner — not the workflows — is the issue. Revert all workflow changes to master until runner support lands. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016naK9Bwh7TtH5KcmKAYzzS
rnegron
reviewed
Jun 26, 2026
rnegron
left a comment
Member
There was a problem hiding this comment.
🤔 I'm not seeing the changes in the diff?
2 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
GitHub Actions now supports running steps in parallel within a single job (
parallel/background/wait/wait-all/cancel). Many of our jobs run a long chain of independent setup steps sequentially — install Python, then uv, then rust, then pnpm, then download a database — when most of these are network-bound and have no dependency on each other. This is wasted wall-clock time on the critical path of nearly every PR.Changes
Adopt step-level parallelism to overlap genuinely-independent work inside single jobs. 16
parallelgroups plus onebackground/waitpattern across 9 workflows:ci-frontend/ frontend-formatci-rust/ testci-rust/ lintingcargo fmt+cargo-binstallrun in the background during the heavy clippy/check compile, thenwaitci-backend/ turbo-testsci-backend/ repo-checksci-backend/ django (main test matrix)ci-nodejs/ tests + rust_ingestion_e2eci-python/ code-qualityci-hog/ hog-testsci-ai/ eval,ci-dagster,ci-mcpbuild + integration-tests,ci-agentsunit/e2eci-agents/ typecheck-lintIn every group, steps with a real data dependency stay sequential after the block —
sqlx-clineeds cargo, SAML needs uv'scache-hitoutput, python deps need python+uv, rust service builds need the toolchain. No twoaptsteps ever share a group (dpkg lock). Every group is ≤7 steps, under the 10-concurrent limit.The pinned
actionlint(v1.7.12) predates this feature, so it would flag the new step keys as unexpected.ci-actionlint.ymlgets scoped-ignorepatterns for just those keys until a supporting version is pinned.How did you test this code?
I'm an agent (Claude Code). I did not run these workflows on real runners — that's what this PR's own CI run will exercise. What I verified locally:
parallel:list of step dicts;background: true+id+wait:).tools/hogli-commands/.../workflow_lint) over all 95 workflows — no parse errors; it sees every new group.pnpm exec oxfmt --check "**/*.{yaml,yml}"passes, so the YAML-format gate stays green.Automatic notifications
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Authored with Claude Code (session) at @gantoine's direction, in response to the parallel-steps changelog. No repo skills were invoked — this is workflow YAML only.
Key decisions:
waitcan't replicate. Converting never-exiting servers tobackground:is also a footgun: the implicit end-of-jobwait-allwould hang on them unless each iscancelled. Thebackground/waitprimitive is used only where it genuinely helps —ci-rust linting.djangojob given its blast radius — kept the token→Python pair and theaptsteps sequential, grouping only the clearly-independent installs.Reviewer watch-items: (1) the first real run validates that the new syntax is accepted on our Depot/GitHub runners; (2) the
actionlint-ignoreregex is a best guess since the docs host was unreachable from the agent environment — if that job goes red, refine the regex or bumpACTIONLINT_VERSION.🤖 Generated with Claude Code
https://claude.ai/code/session_016naK9Bwh7TtH5KcmKAYzzS
Generated by Claude Code